package util

import (
	trueColor "github.com/wayneashleyberry/truecolor/pkg/color"
)

func colorPrint(rgbaPkg [3]uint8, text string) {
	trueColor.Color(rgbaPkg[0], rgbaPkg[1], rgbaPkg[2]).Print(text)
}
func EggBluePrint(text string) {
	trueColor.Color(0, 206, 201).Printf(text)
}
func EggBluePrintf(format string, texts ...interface{}) {
	trueColor.Color(0, 206, 201).Printf(format, texts)
}

func fadedPosterPrintf(format string, texts ...interface{}) {
	trueColor.Color(129, 236, 236).Printf(format, texts)
}

func BrightYarrowPrintf(format string, texts ...interface{}) {
	trueColor.Color(253, 203, 110).Printf(format, texts)
}
func BrightYarrowPrint(text string) {
	trueColor.Color(253, 203, 110).Print(text)
}

func OrangevillePrintf(format string, texts ...interface{}) {
	trueColor.Color(225, 112, 85).Printf(format, texts)
}
func OrangevillePrint(text string) {
	trueColor.Color(225, 112, 85).Print(text)
}
func MintLeafPrintf(format string, texts ...interface{}) {
	trueColor.Color(0, 184, 148).Printf(format, texts)
}
func MintLeafPrint(text string) {
	trueColor.Color(0, 184, 148).Print(text)
}

func mintLeafPrint(text string) {
	trueColor.Color(0, 184, 148).Print(text)
}

func ChiCongPrintf(format string, texts ...interface{}) {
	trueColor.Color(214, 48, 49).Printf(format, texts)
}
func ChiCongPrint(text string) {
	trueColor.Color(214, 48, 49).Print(text)
}

func LightGreenishBluePrintf(format string, texts ...interface{}) {
	trueColor.Color(85, 239, 196).Printf(format, texts)
}
func LightGreenishBluePrint(text string) {
	trueColor.Color(85, 239, 196).Print(text)
}
func SourLemonPrintf(format string, texts ...interface{}) {
	trueColor.Color(255, 234, 167).Printf(format, texts)
}
func SourLemonPrint(text string) {
	trueColor.Color(255, 234, 167).Print(text)
}
func CityLightPrintf(format string, texts ...interface{}) {
	trueColor.Color(223, 230, 233).Printf(format, texts)
}
func CityLightPrint(text string) {
	trueColor.Color(223, 230, 233).Print(text)
}
func ShantenTrueColorChinese(num int) {
	switch {
	case num > 4:
		OrangevillePrint(NumberToChineseShanten(num))
	case num > 2:
		BrightYarrowPrint(NumberToChineseShanten(num))
	default:
		MintLeafPrint(NumberToChineseShanten(num))
	}
}

func GradualChangePrint(text string) {
	var gradientsColor = [...][3]uint8{{225, 112, 85}, {250, 117, 160}, {255, 234, 167}, {253, 203, 110}, {0, 206, 201}, {129, 236, 236}, {85, 239, 196}, {0, 184, 148}, {255, 255, 255}}
	var colorLen = len(gradientsColor)
	for i := 0; i < len(text); i++ {
		trueColor.Color(gradientsColor[i%colorLen][0], gradientsColor[i%colorLen][1], gradientsColor[i%colorLen][2]).Print(string(text[i]))
	}
}

func CatPrint() {
	const cat string = `
          .
         ';;;;;.
        '!;;;;;;!;\
       '!;|&#@|;;;;!:
      ';;!&####@|;;;;!:
     .;;;!r0$$%|!;;;;;;!'.':::::'.                     %&##$;
     '!;;;;;;;;!$@###&|;;|%!;!$|;;;;|&&;.          %&&;;;;;;&%..
     :!;;;;!$@&%|;;;;;;;;;|!::!!:::;!$%;!$%    '!%&#;;;;;;#@$!:.
     ;!;;!!;;;;;|$$&@##$;;;::'''''::;;;;|&|%@$|;;;;;;;;;;;;;;!$;
     ;|;;;;;;;;;;;;;;;;;;!%@#####&!:::;!;;;;;;;;;;!&####@%!;;;$%
    !!;;;;;;;;;;!|%%|!!;::;;|@##%|$|;;;;;;;;;;;;!|%$#####%;;;%&;
    :@###&!:;;!!||%%%%%|!;;;;;||;;;;||!$&&@@%;;;;;;;|$$##$;;;%@|
    ;|::;;;;;;;;;;;;|&&$|;;!$@&$!;;;;!;;;;;;;;;;;;;;;;!%|;;;%@%.
   !!;;;;;;;!!!!;;;;;$@@@&&&&&@$!;!%|;;;;!||!;;;;;!|%%%!;;%@|.
%&&$!;;;;;!;;;;;;;;;;;|$&&&&&&&&&@@%!%%;!||!;;;;;;;;;;;;;$##!
!%;;;;;;!%!:;;;;;;;;;;!$&&&&&&&&&&@##&%|||;;;!!||!;;;;;;;$&:
':|@###%;:;;;;;;;;;;;;!%$&&&&&r0@$!;;;;;;;!!!;;;;;%&!;;|&%.
 !@|;;;;;;;;;;;;;;;;;;|%|$r0r0&&|;;;;;;;;;;;;;!;;;;;!&@@&'
  .:%#&!;;;;;;;;;;;;;;!%|$$r0&@%;;;;;;;;;;;;;;;;;;;!&@:
  .%$;;;;;;;;;;;;;;;;;;|$$$$@&|;;;;;;;;;;;;;;;;;;;;%@%.
    !&!;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;|@#;
     %$!;;;;;;;;;;;$@|;;;;;;;;;;;;;;;;;;;;;;;;!%$@#@|.
       .|@%!;;;;;;;;;!$&%||;;;;;;;;;;;;;;;;;!%$$$$$@#|.
           ;&$!;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;%#####|.
           |##$|!;;;;;;::'':;;;;;;;;;;;;;!%$$$@#@;
          ;@&|;;;;;;;::'''''':;;;;;;;|$&@###@|
        .%##@|;;;;:::''''''''''::;!%&##$'
      $##@$$@@&|!!;;;:'''''::::;;;;;|&#%.
    ;&@##&$%!;;;;;;::''''''''::;!|%$@#@&@@:
     .%@&$$|;;;;;;;;;;:'''':''''::;;;%@#@@#%.
    :@##@###@$$$$$|;;:'''':;;!!;;;;;;!$#@@#$;
     %@$$|;;;;;;;;:'''''''::;;;;|%$$|!!&###&'
     |##&%!;;;;;::''''''''''''::;;;;;;;!$@&:!'
    :;!@$|;;;;;;;::''''''''''':;;;;;;;;!%&@$:                !@#$'
      |##@@&%;;;;;::''''''''':;;;;;;;!%&@#@$%:            '%%!%&;
      |&%!;;;;;;;%$!:''''''':|%!;;;;;;;;|&@%||'         '%$|!%&;
      |@%!;;!!;;;||;:'''''':;%$!;;;;!%%%&#&%$&:        .|%;:!&%
      !@&%;;;;;;;||;;;:''::;;%$!;;;;;;;|&@%;!$;       %&%!!$&:
      '$$|;!!!!;;||;;;;;;;;;;%%;;;;;;;|@@|!$##;      !$!;:!$&:
       |#&|;;;;;;!||;;;;;;;;!%|;;;;!$##$;;;;|%'   '%$|%%;|&$'
        |&%!;;;;;;|%;;;;;;;;$$;;;;;;|&&|!|%&&;  .:%&$!;;;:!$@!
        %#&%!!;;;;||;;;;;!$&|;;;!%%%@&!;;;!!;;;|%!;;%@$!%@!
        !&!;;;;;;;;;||;;%&!;;;;;;;;;%@&!;;!&$;;;|&%;;;%@%
       '%|;;;;;;;;!!|$|%&%;;;;;;;;;;|&#&|!!||!!|%$@@|'
       .!%%&%''|$;     :|$#%|@#&;%#%.

`
	for i := 0; i < len(cat); i++ {
		switch {
		case cat[i] == '&':
			OrangevillePrint(string(cat[i]))
		case cat[i] == ';':
			CityLightPrint(string(cat[i]))
		default:
			SourLemonPrint(string(cat[i]))
		}
	}
}
